#ifndef HASHMAP_UTIL_H
#define HASHMAP_UTIL_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct HashNode
{
    char* key;
    char* value;
    struct HashNode* next; // 当key相同时，指向集合中的下一个节点
}HashNode;

typedef struct
{
    int size; // hash map不重复node的数量
    HashNode** hashArr; // 二维数组，存key值不重复的node，key重复的node链接在HashNode->next
}HashMap;


// 声明一个 保护 n 节点的 hashmap 变量，用于存放映射关系，注意 n 后期不会扩充，需要合理设置，对于 key 重复的，会添加同一个 key 的链表末尾
// 例如，预估最多存在 1024 个 可以，则 n=64 时，每个 key 链平均是 1024 / 64 = 16 个，需要综合考虑查找时间与内存占用的均衡
HashMap* xmap_init(int n);
// 释放 hashmap 变量占用的内存空间，与 xmap_init 对应
void xmap_fint(HashMap* hashMap);
int xmap_put(HashMap* hashMap, char* key, char* value, unsigned long int len);
char* xmap_get(HashMap* hashMap, char* key);
int xmap_del(HashMap* hashMap, char* key);
void xmap_print(HashMap* hashMap);



unsigned int xmap_hash(char *str);
#endif // HASHMAP_UTIL_H
